vtpm: Fix hashed-memory file writing.
authorKeir Fraser <keir.fraser@citrix.com>
Mon, 24 Aug 2009 07:03:46 +0000 (08:03 +0100)
committerKeir Fraser <keir.fraser@citrix.com>
Mon, 24 Aug 2009 07:03:46 +0000 (08:03 +0100)
There is a bug in the vtpm_manager that has to do with hashing and
saving the NVM memory files (vtpm_dm_%d.data). The file is not
truncated when it is written and this results in the hash becoming
invalid because of the extra bits at the end of the file.

This patch adds O_TRUNC to the flags when opening the file.

More details on this issue are in the bug report on bugzilla=20
http://bugzilla.xensource.com/bugzilla/show_bug.cgi?id=3D1488

Signed-off-by: Matt Fioravante <Matthew.Fioravante@jhuapl.edu>
tools/vtpm_manager/manager/securestorage.c

index e4bb5dbb9b91dd4e5af9ce7e5811d900540650d3..d5e6ffda1539de95af7f9335253ac1eb135d7a63 100644 (file)
@@ -199,7 +199,7 @@ TPM_RESULT VTPM_Handle_Save_NVM(VTPM_DMI_RESOURCE *myDMI,
   // TODO: How to properly return from these. Do we care if we return failure
   //       after writing the file? We can't get the old one back.
   // TODO: Backup old file and try and recover that way.
-  fh = open(myDMI->NVMLocation, O_WRONLY | O_CREAT, S_IREAD | S_IWRITE);
+  fh = open(myDMI->NVMLocation, O_WRONLY | O_CREAT | O_TRUNC, S_IREAD | S_IWRITE);
   if ( (bytes_written = write(fh, sealed_NVM.bytes, buffer_len(&sealed_NVM) ) != (long) buffer_len(&sealed_NVM))) {
     vtpmlogerror(VTPM_LOG_VTPM, "We just overwrote a DMI_NVM and failed to finish. %ld/%ld bytes.\n", bytes_written, (long)buffer_len(&sealed_NVM));
     status = TPM_IOERROR;